Our helper method to translate a string according to the LC_TIME
setting uses the no-thread-safe setlocale(). While that's not an
issue in practice given that all JS code shares a single thread,
I was pointed to a better alternative when adopting the same
handling in gnome-desktop's wallclock[0].
[0] https://gitlab.gnome.org/GNOME/gnome-desktop/merge_requests/17
https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/292
const char *locale = g_getenv ("LC_TIME");
const char *res;
char *sep;
+ locale_t old_loc;
+ locale_t loc = (locale_t) 0;
if (locale)
- setlocale (LC_MESSAGES, locale);
+ loc = newlocale (LC_MESSAGES_MASK, locale, (locale_t) 0);
+
+ old_loc = uselocale (loc);
sep = strchr (str, '\004');
res = g_dpgettext (NULL, str, sep ? sep - str + 1 : 0);
- setlocale (LC_MESSAGES, "");
+ uselocale (old_loc);
+
+ if (loc != (locale_t) 0)
+ freelocale (loc);
return res;
}